# 202. 快乐数
# 编写一个算法来判断一个数 n 是不是快乐数。
# 「快乐数」定义为：
# 对于一个正整数，每一次将该数替换为它每个位置上的数字的平方和。
# 然后重复这个过程直到这个数变为 1，也可能是 无限循环 但始终变不到 1。
# 如果这个过程 结果为1，那么这个数就是快乐数。
# 如果 n 是 快乐数 就返回 true ；不是，则返回 false
#
# 示例 1：
# 输入：n = 19
# 输出：true
# 解释：
# 12 + 92 = 82
# 82 + 22 = 68
# 62 + 82 = 100
# 12 + 02 + 02 = 1
#
# 示例 2：
# 输入：n = 2
# 输出：false
#
class Solution:
    def isHappy(self, n: int) -> bool:
        happynum = []
        while n != 1:
            sn = str(n)
            tmp = []
            for i in sn:
                tmp.append(int(i))
            rod = sum([i*i for i in tmp])
            if rod in happynum:
                return False
            else:
                happynum.append(rod)
                n = rod
        return True

if __name__ == '__main__':
    n = 19
    res = Solution()
    s = res.isHappy(n)
    print(s)
    n = 2
    res = Solution()
    s = res.isHappy(n)
    print(s)
    # 出现过就false，这题我应该是两个月前看过解说，没想到现在记得， 现在来看，确实不难
    # 求和的过程中，sum会重复出现，这对解题很重要！
